/**
 * w：容器的宽
 * 使用该布局的容器添加的Elemnet需要实现接口ElementWHI，
 * 		measureWidth：测量宽
 * 		measureHidth：测量高
 * ElementW:元素之间的间距
 * ElementH:元素之间的行距
 */
class BoxLayout extends eui.LayoutBase{
	private w=0
	private elemenW=10;
	private elemenH=10;
	public constructor(w) {
		super();
		this.w =w;
	}
	public measure():void{
		super.measure();
	}
	private rows=[];//所有行{r:row,h:当前行中最高的元素}
	private row=[];//单行 {x:x位置，i:元素位置}
	public updateDisplayList(width: number, height: number){
		super.updateDisplayList(width, height)
		var count = this.target.numElements;
		this.row = []; 
		this.rows =[];
		var indexX=0;
		var H=0;
		for(var i=0;i<count;i++){
			var layout:any =<eui.UIComponent>this.target.getElementAt(i)
			if(i>0){
				var lastLayout:any =this.target.getElementAt(i-1);
				indexX +=lastLayout.measureWidth() +this.elemenW;//追加上个元素的宽作为当前元素的x
			}else{
				H = layout.measureHidth();
			}
			if((indexX+layout.measureWidth()) >this.w || (indexX+layout.measureWidth() )== this.w){
				//计算当前元素放入时，需要换行
				indexX =0;
				this.rows.push({h:H,r:this.row})//将一行的数据，放入rows中
				this.row =[];
				H = layout.measureHidth();//当前元素做为下一行的第一个
			}	
			if(H < layout.measureHidth()){
				//重置当前最高的元素，
				H = layout.measureHidth();
			}
			this.row.push({x:indexX,i:i});//将计算好的x位置保存
		}
		this.rows.push({h:H,r:this.row});//将最后一行数据放入rowso
		var y=0;
		for(var j=0;j<this.rows.length;j++){
			if(j>0){
				y += this.rows[j-1].h+this.elemenH;//追加上一行的最高，作为这一行的y
			}
			for(var k=0;k<this.rows[j].r.length;k++){
				//遍历本行的所有元素
				var layou:any =this.target.getElementAt(this.rows[j].r[k].i);
				var x=this.rows[j].r[k].x
				var yl=y;//默认使用本行最高的元素的y
				if(layou.measureHidth()<this.rows[j].h){
					//如果当前元素的高比，本行的最高的元素的高小，需要居中处理
					yl+=(this.rows[j].h-layou.measureHidth())/2;
				}
				layou.setLayoutBoundsPosition(x,yl);
			}
		}
		y+=this.rows[this.rows.length-1].h;
		this.target.height = y;
	}

}